package com.one.blocks.mvc.manager;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;

/**
 * oracle与mysql驱动不同，操作成功返回影响行数为负数，所以根据返回值判断操作是否成功较麻烦，只要操作没抛异常统一认为操作成功
 *
 * @author linfuxin Created on 2022-02-14 11:31:43
 */
public interface BaseManager<T> {

    /**
     * 插入一条记录
     *
     * @param entity 实体对象
     */
    void insert(T entity);

    /**
     * 删除一条记录
     *
     * @param id 主键id
     */
    void delete(Serializable id);

    /**
     * 批量删除记录
     *
     * @param ids 主键id集合
     */
    void deleteByIds(Collection<? extends Serializable> ids);

    /**
     * 更新单条记录
     *
     * @param entity 实体对象
     */
    void updateById(T entity);

    /**
     * 更新单条记录(只更新不为null的字段)
     *
     * @param entity 实体对象
     */
    void updateSelectiveById(T entity);

    /**
     * 查询单条记录
     *
     * @param id 主键id
     * @return 实体对象
     */
    T get(Serializable id);

    /**
     * 查询多条记录
     *
     * @param ids 主键id集合
     * @return 实体对象集合
     */
    List<T> getByIds(Collection<? extends Serializable> ids);

    /**
     * 根据条件查询单条记录
     *
     * @param param 参数
     * @return 实体对象
     */
    T findOne(T param);

    /**
     * 条件查询所有记录
     *
     * @param entity 实体参数
     * @return 实体对象集合
     */
    List<T> find(T entity);

//    /**
//     * 操作是否成功
//     *
//     * @param rowAffected 影响行数
//     * @return 操作成功返回true, 否则返回false
//     */
//    default boolean retBoolean(int rowAffected) {
//        return rowAffected > 0;
//    }
}
